{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv('ex1data1.txt',names =['x','y'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6.1101</td>\n",
       "      <td>17.5920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5.5277</td>\n",
       "      <td>9.1302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8.5186</td>\n",
       "      <td>13.6620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.0032</td>\n",
       "      <td>11.8540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.8598</td>\n",
       "      <td>6.8233</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        x        y\n",
       "0  6.1101  17.5920\n",
       "1  5.5277   9.1302\n",
       "2  8.5186  13.6620\n",
       "3  7.0032  11.8540\n",
       "4  5.8598   6.8233"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def scale (col):\n",
    "    maxVal =np.amax(col)\n",
    "    minVal =np.amin(col)\n",
    "    \n",
    "    diff =maxVal-minVal\n",
    "    \n",
    "    if diff==0:\n",
    "        diff =maxVal\n",
    "    \n",
    "    for i in range(col.size):\n",
    "        col[i] =col[i]/diff\n",
    "        \n",
    "    return col"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "for column in df:\n",
    "    df[column] =scale(df[column])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradientDescent(x, y, theta, iterations, alpha):\n",
    "    past_cost =[]\n",
    "    past_theta =[theta]\n",
    "    m =y.size\n",
    "    \n",
    "    for i in range(iterations):\n",
    "        prediction =x.dot(theta)\n",
    "        error =prediction -y\n",
    "        cost =1.0/(2*m)*((error.T).dot(error))\n",
    "        theta =theta -alpha*1.0/m*((x.T).dot(error))\n",
    "        past_theta.append(theta)\n",
    "        past_cost.append(cost)\n",
    "        \n",
    "    return past_theta,past_cost    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(127)\n",
    "df.insert(0, \"aug\", np.ones(len(df)), True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "theta =np.random.rand(df.shape[1]-1)\n",
    "iterations =2000\n",
    "alpha =0.01"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Gradient Descent: -0.03, 0.53\n"
     ]
    }
   ],
   "source": [
    "past_thetas, past_costs = gradientDescent(df.iloc[:, :2], df.iloc[:,2], theta, iterations, alpha)\n",
    "theta = past_thetas[-1]\n",
    "\n",
    "#Print the results...\n",
    "print(\"Gradient Descent: {:.2f}, {:.2f}\".format(theta[0], theta[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEWCAYAAACXGLsWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XmcHWWd7/HP95ze0tmXli2EBAxqHBU0Ii4wXkUNLoEZF3BcQLmXy32Zqw6jI158oRPHOwqjo444yoy8XO4oIo5OnIuDqLhdRNIsBkExiwFCEAJJyN5Jd//uH/WcTvXJ6dN9kq4+Sff3/cp5naqnnqr6nerO+fVTT9VTigjMzMzqKTU7ADMzO/w5WZiZ2bCcLMzMbFhOFmZmNiwnCzMzG5aThZmZDcvJwuwIJGmHpBObHYdNHE4WdsSS9BeSutMX5yOSvi/pJYe4zfWSzqqz/KWS+tM+K6/vHco+RxDTTyT913xZREyJiHVjsS8zgJZmB2B2MCRdClwGXALcBOwFlgDnAL8oePcbI2JuwfswO6y4ZWFHHEnTgeXAuyLi3yJiZ0Tsi4jvRcT7U512SZ+WtDG9Pi2pPS2bI+k/JG2VtFnSzyWVJH0NmAd8L7UY/rrBuL4s6W9z8y+VtCE3v17S+yStkvSkpG9K6sgtP0fS3ZK2SVoraYmkjwFnAJ9LMX0u1Q1JT60cD0lflbRJ0gOSPiSplJZdKOkXkv5e0hZJf5B09sEdeZvInCzsSPRCoAP4Tp06lwOnA6cAzwFOAz6Ulv0VsAHoAo4C/hcQEfE24EHgdek0z5UFxP4mshbQAuDZwIUAkk4Dvgq8H5gBnAmsj4jLgZ8Dy1JMy2ps8x+B6cCJwJ8CbwfekVv+AuB+YA5wJfAlSRr1T2bjmpOFHYlmA49HRG+dOm8BlkfEYxGxCfgb4G1p2T7gGOCE1CL5eTQ2SNqxqVVSeb2pgXU/GxEbI2Iz8D2yZAZwEXBtRNwcEf0R8XBE/G64jUkqA+cBH4yI7RGxHvgk+z8rwAMR8c8R0Qd8heyzH9VAzGZOFnZEegKYI6len9uxwAO5+QdSGcBVwBrgB5LWSbqswf1vjIgZudf1Daz7x9z0LmBKmj4eWNtgHJC1Fto48LMeV2ufEbErTU7BrAFOFnYk+iWwBzi3Tp2NwAm5+XmpjPQX+F9FxInA64BLJb081TuUYZh3Ap25+aMbWPch4KQhltWL6XGyllL1Z324gX2bDcvJwo44EfEkcAVwtaRzJXVKapV0tqRKP8M3gA9J6pI0J9X/PwCSXivpqem8/TagL70AHiU7938w7gZeLWmWpKOB9zaw7peAd0h6eepsP07S04eLKZ1auh74mKSpkk4ALiV9VrPR4mRhR6SI+BTZl+KHgE1kf5kvA76bqvwt0A2sAu4B7kxlAAuBHwI7yFopn4+In6Rlf0eWZLZKel+DYX0N+DWwHvgB8M0GPs/tZJ3S/wA8CfyU/a2FzwBvSFczfbbG6v+TrFWzjuyy4a8D1zYY+6BwDmFdG6fkhx+ZWYWkO8kuDPjusJVtQnHLwswAkPRM4BnAXc2OxQ4/ThZmhqRPkJ06+0BEPDBcfZt4fBrKzMyG5ZaFmZkNa9wMJDhnzpyYP39+s8MwMzui3HHHHY9HRNdw9cZNspg/fz7d3d3NDsPM7IgiaUR9VIWehkqjZt4vaU2tIRUkXSLpnjTS5i8kLUrl8yXtTuV3S/pCkXGamVl9hbUs0gBnVwOvIBvhc6WkFRFxX67a1yPiC6n+UuBTZCNyAqyNiFMwM7OmK7JlcRqwJiLWRcRe4DqyB9MMiIhtudnJ+M5RM7PDUpHJ4jiyIRgqNjB4JEwAJL1L0lqycfbfnVu0QNJdkn4q6YxaO5B0sbLHanZv2rRpNGM3M7OcIpNFrYerHNByiIirI+Ik4APsfzjNI8C8iDiVbPyfr0uaVmPdayJicUQs7uoatjPfzMwOUpHJYgPZGP0Vc0lDRA/hOtKQ0xHRExFPpOk7yMb5P7mgOM3MbBhFJouVwEJJCyS1AecDK/IVJC3Mzb4GWJ3Ku1IHOZJOJBsldF2BsZqZWR2FXQ0VEb2SlgE3AWWyR0beK2k50B0RK4Blks4ie3jLFuCCtPqZwHJJvWTPGbgkPYZy1O3o6eWan63jZU9/CqccP6OIXZiZHfEKvSkvIm4EbqwquyI3/Z4h1vs28O0iY6vY19vPZ3+0mlmdrU4WZmZDmPBjQ3W0lgHY09vf5EjMzA5fEz5ZtLdkh2DPvr5hapqZTVwTPlmUSqKtXGLPPrcszMyGMuGTBUB7a8ktCzOzOpwsyPotenqdLMzMhuJkAXS0+jSUmVk9ThZAR0vZp6HMzOpwsqByGsotCzOzoThZUDkN5ZaFmdlQnCzIWhZOFmZmQ3OyILsxzx3cZmZDc7IA2lvL7PGls2ZmQ3KyILsaqsctCzOzITlZ4A5uM7PhOFngDm4zs+E4WZBaFr7PwsxsSE4WZH0Wff3Bvj4nDDOzWpwsyD0AyaeizMxqcrIgG6Ic8JAfZmZDcLIgOw0FblmYmQ3FyYL9LQvfxW1mVluhyULSEkn3S1oj6bIayy+RdI+kuyX9QtKi3LIPpvXul/SqIuN0n4WZWX2FJQtJZeBq4GxgEfDmfDJIvh4Rz4qIU4ArgU+ldRcB5wPPBJYAn0/bK0QlWfhpeWZmtRXZsjgNWBMR6yJiL3AdcE6+QkRsy81OBiJNnwNcFxE9EfEHYE3aXiE6WnwaysysnpYCt30c8FBufgPwgupKkt4FXAq0AS/LrXtb1brH1Vj3YuBigHnz5h10oD4NZWZWX5EtC9UoiwMKIq6OiJOADwAfanDdayJicUQs7urqOuhA9ycLtyzMzGopMllsAI7Pzc8FNtapfx1w7kGue0g6Bq6GcsvCzKyWIpPFSmChpAWS2sg6rFfkK0hamJt9DbA6Ta8AzpfULmkBsBC4vahA2yv3WbiD28yspsL6LCKiV9Iy4CagDFwbEfdKWg50R8QKYJmks4B9wBbggrTuvZKuB+4DeoF3RURh3+Qdvs/CzKyuIju4iYgbgRuryq7ITb+nzrofAz5WXHT7+dJZM7P6fAc32TO4wS0LM7OhOFkAkmhvKdHjDm4zs5qcLBI/Lc/MbGhOFkn2HG6fhjIzq8XJIuloLbPbLQszs5qcLJJJThZmZkNyskg628rs3utkYWZWi5NF0tnWwq69vc0Ow8zssORkkXS0ltnlloWZWU1OFklnm/sszMyG4mSRuM/CzGxoThbJJCcLM7MhOVkknW1ldu3rI+KAZyyZmU14ThZJZ1sLff3B3j7fxW1mVs3JIqkMU+5TUWZmB3KySDrbUrLwFVFmZgdwskgqycL3WpiZHcjJIpnk01BmZkNyskg627InzLplYWZ2ICeLZNLAaSiPD2VmVq3QZCFpiaT7Ja2RdFmN5ZdKuk/SKkk/knRCblmfpLvTa0WRcUKug9stCzOzA7QUtWFJZeBq4BXABmClpBURcV+u2l3A4ojYJel/AFcC56VluyPilKLiqzbQZ+GroczMDlBky+I0YE1ErIuIvcB1wDn5ChFxS0TsSrO3AXMLjKcuXw1lZja0IpPFccBDufkNqWwoFwHfz813SOqWdJukc2utIOniVKd706ZNhxTsJJ+GMjMbUmGnoQDVKKs58JKktwKLgT/NFc+LiI2STgR+LOmeiFg7aGMR1wDXACxevPiQBnXy1VBmZkMrsmWxATg+Nz8X2FhdSdJZwOXA0ojoqZRHxMb0vg74CXBqgbFSLom2lhK79vlqKDOzakUmi5XAQkkLJLUB5wODrmqSdCrwRbJE8ViufKak9jQ9B3gxkO8YL4SfaWFmVlthp6EiolfSMuAmoAxcGxH3SloOdEfECuAqYArwLUkAD0bEUuAZwBcl9ZMltI9XXUVViM5WJwszs1qK7LMgIm4EbqwquyI3fdYQ690KPKvI2GrpSM+0MDOzwXwHd45PQ5mZ1eZkkdPZ2uLhPszManCyyPFzuM3ManOyyOlsK/s+CzOzGpwscjrbWpwszMxqcLLImdJeZkeP+yzMzKo5WeRMbm9hZ08vEYc0coiZ2bjjZJEzpaOF3v6gp7e/2aGYmR1WnCxyprRn9yju9KkoM7NBnCxyJqeRZ91vYWY2mJNFzuR2Jwszs1qcLHL2n4by5bNmZnlOFjlTOtxnYWZWi5NFzpT27NGq250szMwGcbLImeyroczManKyyHGyMDOrzckix5fOmpnV5mSRUy6JzrYyO/Y4WZiZ5TlZVJnc3sJOPwDJzGwQJ4sqU9pb2OH7LMzMBnGyqDIljTxrZmb7FZosJC2RdL+kNZIuq7H8Ukn3SVol6UeSTsgtu0DS6vS6oMg48ya3u8/CzKxaYclCUhm4GjgbWAS8WdKiqmp3AYsj4tnADcCVad1ZwIeBFwCnAR+WNLOoWPOy01BOFmZmeUW2LE4D1kTEuojYC1wHnJOvEBG3RMSuNHsbMDdNvwq4OSI2R8QW4GZgSYGxDnAHt5nZgYpMFscBD+XmN6SyoVwEfL+RdSVdLKlbUvemTZsOMdyM+yzMzA5UZLJQjbKazyuV9FZgMXBVI+tGxDURsTgiFnd1dR10oHlT2lvY7j4LM7NBikwWG4Djc/NzgY3VlSSdBVwOLI2InkbWLcLk9hZ6evvp7fOjVc3MKopMFiuBhZIWSGoDzgdW5CtIOhX4IlmieCy36CbglZJmpo7tV6aywk3xA5DMzA7QUtSGI6JX0jKyL/kycG1E3CtpOdAdESvITjtNAb4lCeDBiFgaEZslfZQs4QAsj4jNRcWaNzU902L7nl5mdLaNxS7NzA57hSULgIi4EbixquyK3PRZdda9Fri2uOhqmzapFYAnd+8bdB7MzGwi8x3cVaanZLFtz74mR2JmdvgYUbKQ9LWRlI0H0zpSstjtPgszs4qRtiyemZ9Jd2c/b/TDab5pk7Izc9t2u2VhZlZRN1lI+qCk7cCzJW1Lr+3AY8C/j0mEY2yaT0OZmR2gbrKIiL+LiKnAVRExLb2mRsTsiPjgGMU4pqa0tSC5ZWFmljfS01D/IWkyZHdbS/pUfoTY8aRUElPbW9jmu7jNzAaMNFn8E7BL0nOAvwYeAL5aWFRNNm1Sq1sWZmY5I00WvRERZKPGfiYiPgNMLS6s5po+qdV9FmZmOSO9KW+7pA8CbwPOSFdDtRYXVnNN62j1pbNmZjkjbVmcB/QA74yIP5INF35V/VWOXNMmtfCkT0OZmQ0YUbJICeJfgemSXgvsiYjx22fR4dNQZmZ5I72D+03A7cAbgTcBv5L0hiIDayZ3cJuZDTbSPovLgedXhhGX1AX8kOy52ePOtI5Wdu7to7evn5ayh88yMxvpN2Gp6nkTTzSw7hGnMuSHn5hnZpYZacviPyXdBHwjzZ9H1dDj40l+5NmZk/1MCzOzuslC0lOBoyLi/ZL+HHgJ2fOxf0nW4T0uVUae9RVRZmaZ4U4lfRrYDhAR/xYRl0bEX5K1Kj5ddHDNkn8AkpmZDZ8s5kfEqurCiOgG5hcS0WFgRqeThZlZ3nDJoqPOskmjGcjhZGZ69vaWnXubHImZ2eFhuGSxUtJ/qy6UdBFwRzEhNV+lZbF5p1sWZmYw/NVQ7wW+I+kt7E8Oi4E24M+G27ikJcBngDLwLxHx8arlZ5L1fTwbOD8ibsgt6wPuSbMPRsTS4T/O6Ggtl5ja0cKWXW5ZmJnBMMkiIh4FXiTpvwB/kor/b0T8eLgNp8EGrwZeAWwga6WsiIj7ctUeBC4E3ldjE7sj4pThP0IxZk1uc7IwM0tGdJ9FRNwC3NLgtk8D1kTEOgBJ15ENcT6QLCJifVrW3+C2Czejs43N7rMwMwOKvQv7OOCh3PyGVDZSHZK6Jd0m6dzRDW14szpb2brLfRZmZjDyO7gPhmqURQPrz4uIjZJOBH4s6Z6IWDtoB9LFwMUA8+bNO/hIa5g5uY3fP7pjVLdpZnakKrJlsQE4Pjc/F9g40pUjYmN6Xwf8BDi1Rp1rImJxRCzu6uo6tGirzOxsY6v7LMzMgGKTxUpgoaQFktqA84EVI1lR0kxJ7Wl6DvBicn0dY2HW5DZ27u1jz76+sdytmdlhqbBkERG9wDLgJuC3wPURca+k5ZKWAkh6vqQNZM/J+KKke9PqzwC6Jf2arGP941VXURWucmOe+y3MzIrtsyAibqRqdNqIuCI3vZLs9FT1ercCzyoytuHMTDfmbdm1l6On17uR3cxs/Bu3z6Q4VJWhyT3kh5mZk8WQZqVksdmd3GZmThZDGRhM0H0WZmZOFkMZGExwh1sWZmZOFkNoLZeY0dnKEzt7mh2KmVnTOVnU0TWlnU3bnSzMzJws6uia6mRhZgZOFnV1TW1n0w4nCzMzJ4s6fBrKzCzjZFFH19R2du3tY2dPb7NDMTNrKieLOrqmtgO4dWFmE56TRR0DycL9FmY2wTlZ1FFJFo9tc7Iws4nNyaKOrimV01B7mhyJmVlzOVnUMbOzjXJJPg1lZhOek0UdpZKYM6XNHdxmNuE5WQyja2o7jzlZmNkE52QxjKOndfDHJ91nYWYTm5PFMI6dMYmNW3c3Owwzs6ZyshjGMdMnsW1Pr+/iNrMJzcliGMfO6ADgkSfdujCziavQZCFpiaT7Ja2RdFmN5WdKulNSr6Q3VC27QNLq9LqgyDjrOWb6JAAe3up+CzObuApLFpLKwNXA2cAi4M2SFlVVexC4EPh61bqzgA8DLwBOAz4saWZRsdYz0LJwv4WZTWBFtixOA9ZExLqI2AtcB5yTrxAR6yNiFdBfte6rgJsjYnNEbAFuBpYUGOuQjprWgQQbfUWUmU1gRSaL44CHcvMbUtmorSvpYkndkro3bdp00IHW01ou8ZSp7W5ZmNmEVmSyUI2yGM11I+KaiFgcEYu7uroaCq4Rx0yfxEZ3cJvZBFZkstgAHJ+bnwtsHIN1R91xMybxiDu4zWwCKzJZrAQWSlogqQ04H1gxwnVvAl4paWbq2H5lKmuKY2d08PDW3fT3j7RhZGY2vhSWLCKiF1hG9iX/W+D6iLhX0nJJSwEkPV/SBuCNwBcl3ZvW3Qx8lCzhrASWp7KmmDd7Mj29/R4jyswmrJYiNx4RNwI3VpVdkZteSXaKqda61wLXFhnfSM2f3QnA+id2cvT0jiZHY2Y29nwH9wicMGsyAA8+savJkZiZNYeTxQgcO6ODlpJY/8TOZodiZtYUThYj0FIucfysTh5wy8LMJignixE6YXYnD2x2y8LMJiYnixGaP3syDzy+iwhfPmtmE4+TxQjNm9XJ9p5eNu/c2+xQzMzGnJPFCC3oyq6IWrvJp6LMbOJxshihpx01FYDfP7q9yZGYmY09J4sROmZ6B1PbW1jtZGFmE5CTxQhJYuFRU7jfycLMJiAniwacfNRUfv/ojmaHYWY25pwsGnDyUVPZvHMvj+/wgIJmNrE4WTTg5Eon9x99KsrMJhYniwY87egsWdz3yLYmR2JmNracLBrQNbWdY6Z3sGrDk80OxcxsTDlZNOjZc6ezasPWZodhZjamnCwa9Oy5M1j/xC6e3LWv2aGYmY0ZJ4sGPWfuDABWPezWhZlNHE4WDXrW3OkA7rcwswnFyaJB0ye1clLXZLrXb252KGZmY8bJ4iCcfuJsVq7fQm9ff7NDMTMbE4UmC0lLJN0vaY2ky2osb5f0zbT8V5Lmp/L5knZLuju9vlBknI164Umz2dHTyz0P+1SUmU0MhSULSWXgauBsYBHwZkmLqqpdBGyJiKcC/wB8IrdsbUSckl6XFBXnwTj9xNkA3LbOp6LMbGIosmVxGrAmItZFxF7gOuCcqjrnAF9J0zcAL5ekAmMaFXOmtLPwKVO4de3jzQ7FzGxMFJksjgMeys1vSGU160REL/AkMDstWyDpLkk/lXRGrR1IulhSt6TuTZs2jW70wzhjYRe/+sNmdvb0jul+zcyaochkUauFECOs8wgwLyJOBS4Fvi5p2gEVI66JiMURsbirq+uQA27EWYuewt7efn6+emyTlJlZMxSZLDYAx+fm5wIbh6ojqQWYDmyOiJ6IeAIgIu4A1gInFxhrw06bP4vpk1r5wX2PNjsUM7PCFZksVgILJS2Q1AacD6yoqrMCuCBNvwH4cUSEpK7UQY6kE4GFwLoCY21YS7nEy57+FH78u8fY50tozWycKyxZpD6IZcBNwG+B6yPiXknLJS1N1b4EzJa0hux0U+Xy2jOBVZJ+TdbxfUlEHHaXHr36Wcewddc+fvZ7n4oys/GtpciNR8SNwI1VZVfkpvcAb6yx3reBbxcZ22h46dO6mD25jRvu2MDLn3FUs8MxMyuM7+A+BK3lEueeehw//O2jbN65t9nhmJkVxsniEL1p8fHs6wu+cfuDzQ7FzKwwThaH6GlHT+WMhXP48q3r6enta3Y4ZmaFcLIYBf/9zJPYtL2HG+7Y0OxQzMwK4WQxCl781Nk8d94MPv3D1b6j28zGJSeLUSCJy1+ziE3be/jCT9c2Oxwzs1HnZDFKnnfCTM495Vj+6Sdr+Y2HLjezccbJYhR9ZOkzmTW5jUuvv5tde306yszGDyeLUTSjs42/f+NzWPPYDt5z3d309VePm2hmdmRyshhlZ57cxRWvXcTN9z3KB769yo9eNbNxodDhPiaqC1+8gK279/HpH65m6659fPJNz2H6pNZmh2VmdtDcsijIe886mb9Z+kx+cv9jvOazP/dgg2Z2RHOyKNAFL5rP9Ze8kHJJvP3a23nnl1dy+x82E+G+DDM7smi8fHEtXrw4uru7mx1GTT29fXzpF3/gmp+tY+uufTz96Km8+lnH8IpFR/G0o6ZSKh32jx03s3FK0h0RsXjYek4WY2f33j6+fecGvnvXw9zx4BYiYGpHC6fOm8kzjpnKiXMms2DOFObOnMTsKW20t5SbHbKZjXMjTRbu4B5Dk9rKvPX0E3jr6Sfw6LY9/GL149zx4BbufGALv1z7OPv6Bifu6ZNamTOljZmdbUzpaGFyewtT2tJ7e5lJbS20tZRoKyt7bynRWi7RVi6l8tJAeUupRGtZlEuipVSiXBatpcHzLaXsVS4Jya0dM9vPyaJJjprWweufN5fXP28uAL19/Wzcuoe1j+/gka17eHxHD5u29/D4jh627NrL5p17eXDzLnb29LKzp4+de3spslFYTkljIKGUSymxiJZySjC55NJSLu2frtQXlEslyqVseyVpYLvlNF3KTVdeWb20bpoeql5L1TZKaf/790WqV6JUok69/dvLx1UqkX3WNF1dz0nVJgoni8NES7nEvNmdzJvdOaL6EUFPbz89vf3s7e1nX1/2vrf6Pb16+/vp7Q/6+oPevux9X3//oPne/qC3L1evP+jr72df3+D5/HZ6K9tIZfv6slh27+sb2G5/ZO99EfSnuv1pvq8f+iPbb38wUK8vbe9IkCWQbIywkrKEVJKQ9icXaX/iKqXEMzCtfHluPjddTturJLf8dGXflYQ2MF1jO4Om8/svVcWS33d+f6q979JAOYhsWrntVeYFg+seUDZ4XZG9k4u5si4MPu6llLirtzXUfoCBz1lzP6k+uW0MuR8YiHu8crI4Qkmio7VMR+v47tfor0oelYSTn+/rD/r7SdP99PUzkKQqSax/oF4qG2o7KYENbKdmgttfFhH0R5bw+iKI2B9zpPLKNqPWdKoTA/tn0HRl/f5KUu3vZ29fKs/V6evfv7/8vgeV57ef1o9In7HyOfr3T1vjUm6pmSAHklalTqmSZDSQ/CrLBichDWy7pHyd/Ulq0bHT+cc3n1roZ3OysMNaqSRKiHGeEw9LNZNWHJio+vuDoJL09r9HQLC/XqRENVTd/kHLKssZSMjB4HUq9fN1h90PWeKtLGPgs+2PlRgcc38639tftR/ggM8eVdsaFEv/4M9x4OcCOPDYVabTv9xn2b/tebMmFf77UGiykLQE+AxQBv4lIj5etbwd+CrwPOAJ4LyIWJ+WfRC4COgD3h0RNxUZq5kNJmX9U2ZQ4E15ksrA1cDZwCLgzZIWVVW7CNgSEU8F/gH4RFp3EXA+8ExgCfD5tD0zM2uCIu/gPg1YExHrImIvcB1wTlWdc4CvpOkbgJcrO0F3DnBdRPRExB+ANWl7ZmbWBEUmi+OAh3LzG1JZzToR0Qs8Ccwe4bpIulhSt6TuTZs89pKZWVGKTBa1TnZWX2MxVJ2RrEtEXBMRiyNicVdX10GEaGZmI1FkstgAHJ+bnwtsHKqOpBZgOrB5hOuamdkYKTJZrAQWSlogqY2sw3pFVZ0VwAVp+g3AjyMbrGoFcL6kdkkLgIXA7QXGamZmdRR26WxE9EpaBtxEdunstRFxr6TlQHdErAC+BHxN0hqyFsX5ad17JV0P3Af0Au+KiL6iYjUzs/o86qyZ2QQ24YYol7QJeOAQNjEHeHyUwhlNjqsxjqsxjqsx4zGuEyJi2CuExk2yOFSSukeSXcea42qM42qM42rMRI7Lj1U1M7NhOVmYmdmwnCz2u6bZAQzBcTXGcTXGcTVmwsblPgszMxuWWxZmZjYsJwszMxvWhE8WkpZIul/SGkmXjfG+j5d0i6TfSrpX0ntS+UckPSzp7vR6dW6dD6ZY75f0qgJjWy/pnrT/7lQ2S9LNklan95mpXJI+m+JaJem5BcX0tNwxuVvSNknvbcbxknStpMck/SZX1vDxkXRBqr9a0gW19jUKcV0l6Xdp39+RNCOVz5e0O3fcvpBb53np578mxX7IT0EaIraGf3aj/X92iLi+mYtpvaS7U/mYHLM63w3N+x2LgUcYTrwX2TAka4ETgTbg18CiMdz/McBz0/RU4PdkD4r6CPC+GvUXpRjbgQUp9nJBsa0H5lSVXQlclqYvAz6Rpl8NfJ9stODTgV+N0c/uj8AJzThewJnAc4HfHOzxAWYB69L7zDQ9s4C4Xgm0pOlP5OKan69XtZ3bgRemmL8PnF3QMWvoZ1fE/9lacVUt/yRwxVgeszrfDU37HZvoLYuRPKCpMBHxSETcmaa3A7+lxnM7cpr9UKj8w6q+ApybK/9qZG4DZkg6puBYXg6sjYh6d+0Xdrwi4mdk45lV76+R4/Mq4OaI2BwRW4CbyZ4MOapxRcSkv1u4AAAGDUlEQVQPInteDMBtZKM4DynFNi0ifhnZN85Xc59lVGOrY6if3aj/n60XV2odvAn4Rr1tjPYxq/Pd0LTfsYmeLEb0kKWxIGk+cCrwq1S0LDUnr600NRnbeAP4gaQ7JF2cyo6KiEcg+2UGntKEuCrOZ/B/4GYfL2j8+DTjuL2T7C/QigWS7pL0U0lnpLLjUixjFVcjP7uxPmZnAI9GxOpc2Zges6rvhqb9jk30ZDGihywVHoQ0Bfg28N6I2Ab8E3AScArwCFkzGMY23hdHxHPJnqH+Lkln1qk7psdR2ZD3S4FvpaLD4XjVc0gP+Rq1IKTLyUZx/tdU9AgwLyJOBS4Fvi5p2hjH1ejPbqx/pm9m8B8lY3rManw3DFl1iP2PWlwTPVk0/SFLklrJfhn+NSL+DSAiHo2IvojoB/6Z/adOxizeiNiY3h8DvpNieLRyeim9PzbWcSVnA3dGxKMpxqYfr6TR4zNm8aWOzdcCb0mnSUineJ5I03eQ9QWcnOLKn6oq8ves0Z/dWB6zFuDPgW/m4h2zY1bru4Em/o5N9GQxkgc0FSadD/0S8NuI+FSuPH++/8+AylUaY/JQKEmTJU2tTJN1kP6GwQ+rugD491xcb09XZJwOPFlpKhdk0F97zT5eOY0en5uAV0qamU6/vDKVjSpJS4APAEsjYleuvEtSOU2fSHZ81qXYtks6Pf2Ovj33WUY7tkZ/dmP5f/Ys4HcRMXB6aayO2VDfDTTzd+xge+vHy4vsKoLfk/2FcPkY7/slZE3CVcDd6fVq4GvAPal8BXBMbp3LU6z3MwpXqAwR14lkV5n8Gri3clyA2cCPgNXpfVYqF3B1iuseYHGBx6wTeAKYnisb8+NFlqweAfaR/fV20cEcH7I+hDXp9Y6C4lpDdt668jv2hVT39enn+2vgTuB1ue0sJvviXgt8jjTaQwGxNfyzG+3/s7XiSuVfBi6pqjsmx4yhvxua9jvm4T7MzGxYE/00lJmZjYCThZmZDcvJwszMhuVkYWZmw3KyMDOzYTlZ2LghKSR9Mjf/PkkfKWA/V6WRQK+qKl+qNAqqpHMlLRrFfZ6iwSOyDuzLbCz40lkbNyTtIbte/vkR8bik9wFTIuIjo7yfbUBXRPTUqfNl4D8i4oYGttsS+wf8q152Idm188saDNdsVLhlYeNJL9mziP+yeoGkEyT9KA1Y9yNJ8+ptKN0Je5Wk3yh7RsF5qXwFMBn4VaUst86Fkj4n6UVkY1ddpeyZByel138qG5jx55Kentb5sqRPSboF+ISk0yTdmgaqu1XZMzzagOXAeWl751X2Ve+zpW1/Nm1nnaQ3pPJjJP0sbes32j8YntmQWpodgNkouxpYJenKqvLPkQ3h/BVJ7wQ+S/0hpP+cbHC75wBzgJWSfhYRSyXtiIhThloxIm5NSWWgZSHpR2R3A6+W9ALg88DL0ionA2dFRJ+yQenOjIheSWcB/zsiXi/pCnIti9TSGMlnO4bsbuCnk90hfQPwF8BNEfGxNHRFZ53jYAY4Wdg4ExHbJH0VeDewO7fohWQJALIhJqqTSbWXAN+IiD6ywdt+CjyfgxiHSNnIoS8CvqX9D09rz1X5VtoPwHTgK5IWkg330DqCXdT7bN+NbJC++yQdlcpWAtcqG6juuxFxd6OfySYen4ay8ejTZOMOTa5TZ7jOukN+jGhOCdgaEafkXs/ILd+Zm/4ocEtE/AnwOqDjIPaX/2z5fhXBwMN+zgQeBr4m6e0HsQ+bYJwsbNyJiM3A9WQJo+JWshFKAd4C/GKYzfyMrI+gLKmL7Mu1kRFrt5M9DpPInkPwB0lvhIH+kOcMsd50si9xgAtrba+Ghj6bpBOAxyLin8lGNi3kmek2vjhZ2Hj1SbK+hop3A++QtAp4G/AeGLgEdXmN9b9DNuLnr4EfA38dEX9sYP/XAe9PHdUnkX2JXySpMpLvUI8CvRL4O0n/j+x50xW3AIsqHdxV69T8bHW8FLhb0l1ko6h+poHPZROUL501M7NhuWVhZmbDcrIwM7NhOVmYmdmwnCzMzGxYThZmZjYsJwszMxuWk4WZmQ3r/wOqpdSkvORVQQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.title('Cost Function J')\n",
    "plt.xlabel('No. of iterations')\n",
    "plt.ylabel('Cost')\n",
    "plt.plot(past_costs)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.title('Sale Price vs Living Area')\n",
    "plt.xlabel('Living Area in square feet (normalised)')\n",
    "plt.ylabel('Sale Price ($)')\n",
    "plt.scatter(df.iloc[:,1], df.iloc[:,2], color='red')\n",
    "x = np.linspace(0.2, 1.6, 100)\n",
    "y = theta[1]*x + theta[0]\n",
    "plt.plot(x, y)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
